<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // Object.is()从应用功能上和===功能一致，仅在于+0和-0、NaN和NaN比较上存在差异
        console.log(NaN===NaN);//false
        console.log(+0===-0);//true
        console.log(Object.is(NaN,NaN));//true
        console.log(Object.is(+0,-0));//false

        // Object.assign(target,source)用于将对象中所有可循环(可遍历)的属性，从一个或多个对象中复制到新对象中
        //     target  描述承载复制结果的新对象
        //     source  指定待复制的对象列表，如果完成多个对象合并操作，后续的对象的属性会覆盖前面对象中相同的属性

        var obj={
            b:200
        };
        var copyObj1={
            a:1,
            b:2,
            c:3
        };
        var copyObj2={
           d:4,
           f:5
        };
        Object.defineProperties(copyObj1,{
            name:{
                value:"alice",
                enumerable:false
            },
            age:{
                value:20,
                enumerable:true
            }
        });

       var result= Object.assign(obj,copyObj1,copyObj2);
        console.log(result);
/* 
        - Object.keys()获取对象中所有的可循环的属性名，返回构成属性的列表
        - Object.values()获取对象中所有的可循环的属性值，返回构成属性的列表
        - Object.entries()获取对象中所有的可循环的属性名和属性值，返回构成对象形式的列表：[[属性名,属性值],[属性名,属性值],[属性名,属性值]...]
         */

        console.log(Object.keys(copyObj1));
        console.log(Object.values(copyObj1));
        console.log(Object.entries(copyObj1));
        // Object.fromEntries()将对象构成的列表转换成js的标准对象的解构
        var objs=Object.entries(copyObj1);//[[属性名,属性值],[属性名,属性值],[属性名,属性值]...]
        var newObj=Object.fromEntries(objs);
        console.log(newObj);
    </script>
</head>
<body>
    
</body>
</html>